//
//  ZipRarManager.h
//  Compress
//
//  Created by 金色榜样研发组 on 2019/5/30.
//  Copyright © 2019 金色榜样研发组. All rights reserved.
//

/*
 
 如果SSZipArchive解压出来的文件为乱码时，可用如下方法解决
 
 在SSZipArchive.m中搜索【CFStringConvertEncodingToNSStringEncoding】
 
 将
 NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingDOSLatinUS);
 NSString* strPath = [NSString stringWithCString:filename encoding:encoding];
 修改为
 NSString *strPath=[NSString stringWithCString:filename encoding:NSUTF8StringEncoding];
 
 即可解决
 
 */


/*
 
 UnrarKit 使用pod导入之后会报错，导入依赖库 libc++.bdt 即可
 
 */

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface ZipRarManager : NSObject

#pragma mark ------------------------------------------ ZIP 压缩与解压缩 ------------------------------------------

#pragma mark -------------- 解压缩 --------------

/**
 单个解压缩(也可以进行多个文件解压缩，但无法监听进度)

 @param filePath 需要解压缩的zip文件目录
 @param destination 需要解压缩到的文件夹目录
 @param password 密码
 @return 是否解压缩成功
 */
+ (BOOL)unzipFileAtPath:(NSString *)filePath toDestination:(NSString *)destination withPassword:(nullable NSString *)password;


/**
 多文件解压缩(可以监听到解压缩进度)

 @param filePath 需要解压缩的zip文件目录
 @param destination 需要解压缩到的文件夹目录
 @param password 密码
 @param handler 解压缩进度
 @param completionHandler 解压缩完成回调
 @return 是否解压缩成功
 */
+ (BOOL)unzipFileAtPath:(NSString *)filePath toDestinationn:(NSString *)destination withPassword:(nullable NSString *)password andProgressHandler:(void(^ _Nullable)(NSString *namePath, NSString *name, NSInteger currentIndex, NSInteger totalCount))handler completionHandler:(void (^)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler;



#pragma mark -------------- 压缩 --------------
/**
 压缩单个或者多个文件[无回调](根据文件夹路径来压缩文件)

 @param filePath 目标文件目录(zip文件目录)
 @param directory 需要压缩的文件夹路径
 @param password 密码(解压缩时，需要输入该密码进行解压)
 @return 是否压缩成功
 */
+ (BOOL)createZipFileAtPath:(NSString *)filePath  withContentsDirectory:(NSString *)directory withPassword:(nullable NSString *)password;

/**
 压缩多个文件(根据文件夹路径来压缩文件)
 
当压缩多个文件时，将文件放入某个文件夹中，可以使用该方法进行压缩操作
 压缩单个文件也可以使用该方法
 @param filePath 目标文件目录(zip文件目录)
 @param directory 需要压缩的文件夹路径
 @param password 密码(解压缩时，需要输入该密码进行解压)
 @param handler 回调函数
 @return 是否压缩成功
 */
+ (BOOL)createZipFileAtPath:(NSString *)filePath withContentsDirectory:(NSString *)directory withPassword:(nullable NSString *)password andProgressHandler:(void(^ _Nullable)(NSInteger currentIndex, NSInteger totalCount))handler;

/**
 压缩多个文件(根据多个文件的路径数组来压缩文件，此时无法监听压缩进度)

 @param filePath 目标文件目录(zip文件目录)
 @param paths 需要压缩的文件路径数组
 @param password 密码(解压缩时，需要输入该密码进行解压)
 @return 是否压缩成功
 */
+ (BOOL)createZipFileAtPath:(NSString *)filePath withFilesAtPaths:(NSArray *)paths withPassword:(nullable NSString *)password;

#pragma mark ------------------------------------------ RAR 压缩与解压缩 ------------------------------------------

@end

NS_ASSUME_NONNULL_END
